<?php

class Application_Permiso_Usuarios implements Zend_Acl_Resource_Interface {   
    public $usuario = null;
    public function getResourceId()
    {
        return 'usuarios';
    }
}

class Application_Permiso_Comentarios implements Zend_Acl_Resource_Interface {
    public $creador = null;
    public function getResourceId()
    {
        return 'comentarios';
    }
}

class Application_Permiso_Acl extends Zend_Acl
{
    public function __construct()
    {        
        //agrego reglas; son niveles de permisos
        $this->addRole(new Zend_Acl_Role('visita'))
            ->addRole(new Zend_Acl_Role('miembro'),'visita')
            ->addRole(new Zend_Acl_Role('adminMateriales'),'miembro')
            ->addRole(new Zend_Acl_Role('adminCarreras'),'miembro')
            ->addRole(new Zend_Acl_Role('adminBlog'),'miembro')
            ->addRole(new Zend_Acl_Role('admin'));

        //asigno recursos
        $this->add(new Zend_Acl_Resource('auth'));
        $this->add(new Zend_Acl_Resource('error'));
        $this->add(new Zend_Acl_Resource('index'));
        $this->add(new Zend_Acl_Resource('materiales'));
        $this->addResource('usuarios');
        $this->add(new Zend_Acl_Resource('blog'));
        $this->add(new Zend_Acl_Resource('articulos'));
        $this->addResource('comentarios');
        $this->add(new Zend_Acl_Resource('carreras'));
        $this->add(new Zend_Acl_Resource('cursos'));

        //habilito o deshabilito permisos
        $this->allow( 'visita',array('auth','error','index') );  
        $this->allow( 'visita','usuarios','crear' ); 
        $this->allow( 'visita','usuarios','recordar-clave' );
        $this->allow( 'visita','materiales','index');
        $this->allow( 'visita','materiales','descargar');
        $this->allow( 'visita','blog','index');
        $this->allow( 'visita','articulos','index' );
        $this->allow( 'visita','articulos','ver' );
        $this->allow( 'visita','carreras','index' );
        
        $this->deny( 'miembro','usuarios','crear' );        
        $this->allow( 'miembro','comentarios','crear' );
        require_once 'ComentarioAssertion.php';
        $this->allow( 'miembro','comentarios','borrar', new Application_Permiso_ComentarioAssertion() );
        require_once 'UsuarioAssertion.php';
        $this->allow( 'miembro','usuarios','borrar', new Application_Permiso_UsuarioAssertion() );
        $this->allow( 'miembro','usuarios','ver', new Application_Permiso_UsuarioAssertion() );
        $this->allow( 'miembro','usuarios','editar', new Application_Permiso_UsuarioAssertion() );
        $this->allow( 'miembro','usuarios','cambiar-clave', new Application_Permiso_UsuarioAssertion() );
        
        $this->allow( 'adminMateriales','materiales');
        $this->allow( 'adminBlog','articulos');
        $this->allow( 'adminBlog','comentarios');
        $this->allow( 'adminCarreras','carreras');
        $this->allow( 'adminCarreras','cursos');
        
        // el administrador puede hacer todo
        $this->allow( 'admin' );
    }
}
